package edu.hunau.cxb19.oop.class22;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;

/**
 *
 * 对数据进行处理的工具类
 * 
 * @author hb
 *
 *         2020-03-25 14:53:05
 */
public class FilterUtils {

	/**
	 * 对集合中的数据进行过滤
	 * 
	 * @param <T>
	 * @param list
	 * @param p
	 * @return
	 */
	public static <T> List<T> filter(List<T> list, Predicate<T> p) {
		List<T> result = new ArrayList<>();
		for (T t : list) {
			if (p.test(t)) {
				result.add(t);
			}
		}
		return result;
	}

	/**
	 * 对集合中的数据进行迭代
	 * 
	 * @param <T>
	 * @param list
	 * @param c
	 */
	public static <T> void forEach(List<T> list, Consumer<T> c) {
		for (T t : list) {
			c.accept(t);
		}
	}

	/**
	 * 将List<T>转成List<R>
	 * @param <T>
	 * @param <R>
	 * @param list
	 * @param f
	 * @return
	 */
	public static <T, R> List<R> map(List<T> list, Function<T, R> f) {
		List<R> result = new ArrayList<>();
		for (T t : list) {
			 result.add(f.apply(t));//通过apply将T类型的数据转成R类型
		}
		return result;
	}

}
